package com.zx._01_基础._010_util;

import java.util.Arrays;
import org.junit.Test;

public class ArrayTest {

    /**
     * 增加一个数组的长度。在最后追加一个元素
     *
     * @param a
     * @return
     */
    public static Integer[] add(Integer[] a, Integer num) {

        Integer[] t = a;// 创建一个临时数组将原来的数组的值赋予它
        a = new Integer[t.length + 1];//为原来的数组创建一个新的动态数组，比原来的长一个
        a[t.length] = num;//最后一个添加新的元素
        System.arraycopy(t, 0, a, 0, t.length);//将临时数组复制给新数组。
        return a;
    }

    /**
     * 去除第i个元素，减少一个数组的长度
     *
     * @param a
     * @param i
     * @return
     */
    public static Integer[] dele(Integer[] a, Integer i) {
        Integer[] t = a;// 创建一个临时数组将原来的数组的值赋予它
        a = new Integer[t.length - 1];//为原来的数组创建一个新的动态数组，比原来的长一个
        /*假设要删除下标是i个元素*/
        System.arraycopy(t, 0, a, 0, i);//将临时数组复制给新数组。
        System.arraycopy(t, i + 1, a, i, t.length - i - 1);//将临时数组复制给新数组。
        return a;
    }

    // 基础操作
    @Test
    public void test01() {
        int[] a = {1, 2, 3};
        int[] b = {1, 2, 3};
        // 依次对比每一个元素，完全相等时返回true
        System.out.println(Arrays.equals(a, b));

        // 将数组a复制，并定义新数组的长度，返回b是一个开辟新的堆栈区的数组
        int[] ints = Arrays.copyOf(a, 2);

        // 将数组转换为字符串
        System.out.println(Arrays.toString(ints));

        // 将数组a中的第index1元素到第index2元素，全都替换为c
        Arrays.fill(a, 0, 1, -1);
        System.out.println(Arrays.toString(a));

        // 排序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));
    }

    @Test
    public void test02() {
        Integer[] a = new Integer[10];
        for (Integer i = 0; i < a.length; i++) {
            a[i] = (int) (Math.random() * 10);
        }

        System.out.println("增加前的数组" + Arrays.toString(a));
        a = add(a, 10);
        System.out.println("增加后的数组" + Arrays.toString(a));
        a = dele(a, 5);
        System.out.println("删除后的数组" + Arrays.toString(a));
        Arrays.sort(a);//从小到大排序
        System.out.println("排序后的数组" + Arrays.toString(a));
    }
}
